The present invention is directed to methods and apparatus for providing multi-layered coding for memory devices, and more particularly encoding and decoding data in multiple layers to efficiently maintain data integrity.
Typically data storage systems store data in non-volatile memory devices, e.g., flash memory devices. Such memory devices, however, may be unreliable in some circumstances due to programming imperfections or defects that may cause errors in the stored information. For example, flash memory devices contain cells with statistically varying voltage threshold, which result in varying read-out current. Such variation in the read-out current reduces the margin between signal levels and may lead to read-out errors. Thus, correction schemes become critical for compensating for the read-out errors.
Data may be stored and organized in memory devices, e.g., non-volatile memory devices, in a structured paradigm. The structured paradigm may be made up of multiple allocation units which may be the smallest element of data that includes, for example, 512 bytes of data. Each of these allocation units is typically referred to as a page of data. A group of these allocation units (i.e., pages of data) form a larger data packet of the structured paradigm and may be referred to as a data sector. Data sectors may include four pages of data. A data file may be spread across many data sectors or may reside in a fractional data sector occupying, for example, less than four pages of data. A processor or controller may retrieve data either in pages or sectors.
Correction schemes, known as coding mechanisms, may include Cyclic Codes, among others, and may in some limited circumstances correct and/or detect errors in data read from memory devices using parity bits that are appended to the data stored in the memory. These correction schemes, however, may reduce the efficiency of the overall system because the correction schemes may compute parity bits across multi-page units (e.g., a data sector) and may therefore require large blocks of data (e.g., data sectors) to be read in order to perform the correction, thereby preventing the processor from reading the data one page at a time. Alternatively, if the CRC is performed on a page-by-page basis, the integrity of the data is reduced because less correction/detection is possible.